<!doctype html>
<meta name=timeout content=long>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<script src="resources/protected-audience-helper-module.js"></script>

<body>
<script>
'use strict';

promise_test(async test => {
  const uuid = generateUuid();
  const contribution = '{ bucket: 1n, value: 1 }';

  await runReportTest(test, uuid,
    { scoreAd:
    `privateAggregation.contributeToHistogram(${contribution});
    forDebuggingOnly.reportAdAuctionWin('${createWritingURL(uuid)}');`
    },
    /*expectedNumReports=*/ 1);
}, 'contributeToHistogram() with positive bucket in scoreAd()');

promise_test(async test => {
  const uuid = generateUuid();
  const contribution = '{ bucket: 0n, value: 1 }';

  await runReportTest(test, uuid,
    { reportResult:
    `privateAggregation.contributeToHistogram(${contribution});
    sendReportTo('${createWritingURL(uuid)}');`
    },
    /*expectedNumReports=*/ 1);
}, 'contributeToHistogram() with zero bucket in reportResult()');


promise_test(async test => {
  const uuid = generateUuid();
  const contribution = '{ bucket: 18446744073709551616n, value: 1 }';

  await runReportTest(test, uuid,
    { generateBid:
    `privateAggregation.contributeToHistogram(${contribution});
    forDebuggingOnly.reportAdAuctionWin('${createWritingURL(uuid)}');`
    },
    /*expectedNumReports=*/ 1);
}, 'contributeToHistogram() with large bucket in generateBid()');

promise_test(async test => {
  const uuid = generateUuid();
  const contribution = '{ bucket: 340282366920938463463374607431768211455n, value: 1 }';

  await runReportTest(test, uuid,
    { reportWin:
    `privateAggregation.contributeToHistogram(${contribution});
    sendReportTo('${createWritingURL(uuid)}');`
    },
    /*expectedNumReports=*/ 1);
}, 'contributeToHistogram() with max bucket in reportWin()');

promise_test(async test => {
  const uuid = generateUuid();
  const contribution = '{ bucket: 1n, value: 1 }';

  await runReportTest(test, uuid,
    { scoreAd:
    `privateAggregation.contributeToHistogram(${contribution});
    forDebuggingOnly.reportAdAuctionWin('${createWritingURL(uuid)}');`
    },
    /*expectedNumReports=*/ 1);
}, 'contributeToHistogram() with positive value in scoreAd()');

promise_test(async test => {
  const uuid = generateUuid();
  const contribution = '{ bucket: 1n, value: 0 }';

  await runReportTest(test, uuid,
    { reportResult:
    `privateAggregation.contributeToHistogram(${contribution});
    sendReportTo('${createWritingURL(uuid)}');`
    },
    /*expectedNumReports=*/ 1);
}, 'contributeToHistogram() with zero value in reportResult()');

promise_test(async test => {
  const uuid = generateUuid();
  const contribution = '{ bucket: 1n, value: 2.3 }';

  await runReportTest(test, uuid,
    { generateBid:
    `privateAggregation.contributeToHistogram(${contribution});
    forDebuggingOnly.reportAdAuctionWin('${createWritingURL(uuid)}');`
    },
    /*expectedNumReports=*/ 1);
}, 'contributeToHistogram() with non-integer value in generateBid()');

</script>
</body>
